//
//  "$Id$"
//
//  Copyright (c)1992-2009, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//
//
//  "$Id$"
//
//  Copyright (c)1992-2009, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	GPS接口
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __GPS_API_H__
#define __GPS_API_H__

#include "Types.h"
#include "Defs.h"

#ifdef __cplusplus
extern "C" {
#endif

/// \defgroup GPSAPI API GPSs
/// GPS操作接口
///	\n 调用流程图:
/// \code
///    ===========================
///                 |
///         createGPS
///                 |
///              addRef
///                 |
///              getCaps
///                 |
///		 setPowerMode
///                 |
///           getPowerMode
///                 |
/// +------\|
/// |  getInfo
/// +------/|
///                 |
///              release
///                 |
///    ===========================
/// \endcode
/// @{

/// GPS设备特性结果，128字节
typedef struct GPSCaps
{
	char		powerMode;	///< 是否支持电源控制，0-不支持，1-支持
	int		reserved[31];	///< 保留
}GPSCaps;

/// GPS信息，128字节
typedef struct GPSInfo
{
	uint		utc;			///< utc时间
	float		longitude;	///< 经度，<0表示西经，>=0表示东经，单位：秒
	float		latitude;		///< 纬度，<0表示南纬，>=0表示北纬，单位：秒
	float		altitude;		///< 海拔，单位：米
	float		speed;		///< 速度，单位：km/h
	float		bearing;		///< 方向角，单位：度
	int		reserved[26];	///< 保留
}GPSInfo;

/// GSP接口，512字节
typedef struct GPS
{
	/// 底层似有数据
	void *priv;
	
	/// 增加接口引用
	///
	/// \param [in] thiz GPS接口指针
	/// \retval 0 成功
	/// \retval <0失败
	int (*addRef)(struct GPS *thiz);
	
	/// 释放接口
	///
	/// \param [in] thiz GPS接口指针
	/// \retval 0 成功
	/// \retval <0失败
	int (*release)(struct GPS *thiz);
	
	/// 获取GPS能力
	///
	/// \param [in] thiz GPS接口指针
	/// \param [out] caps GPS特性结构GPSCaps指针
	/// \retval 0 获取成功
	/// \retval <0 获取失败
	int (*getCaps)(struct GPS *thiz, GPSCaps *caps);
	
	/// GPS电源控制
	///
	/// \param [in] thiz GPS接口指针
	/// \param [in] state 电源操作，0-关闭电源，1-打开电源
	/// \retval 0 成功
	/// \retval <0失败
	int (*setPowerMode)(struct GPS *thiz, int state);
	
	/// 获取GPS电源状态
	///
	/// \param [in] thiz GPS接口指针
	/// \param [out] state GPS电源状态，0-关闭，1-上电
	/// \retval 0 成功
	/// \retval <0 失败
	int (*getPowerMode)(struct GPS *thiz, int *state);
	
	/// 获取GPS信息
	///
	/// \param thiz[in] GPS接口指针
	/// \param info[out] GPSInfo结构指针
	/// \retval 0 成功
	/// \retval <0失败
	int (*getInfo)(struct GPS *thiz, GPSInfo *info);
	
	/// 保留字节
	int reserved[121];
}GPS;

/// GPS接口描述结构，128字节
typedef struct GPSDesc
{
	int port;			///< GPS编号
	int	reserved[31];	///< 保留字节
}GPSDesc;

/// 创建GPS接口
///
/// \param [in] desc GPS接口描述指针
/// \param [in] gps GPS接口指针的指针
/// \retval 0 成功
/// \retval <0 失败
int PAL_API createGPS(GPSDesc *desc, GPS **gps);

/// 得到GPS数目
///
/// \retval GPS数目
int PAL_API getGPSCount(void);

/// @} end of group
#ifdef __cplusplus
}
#endif

#endif //__GPS_API_H__
